﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;

namespace CustomTypes.Interfaces
{

    public class CustomType
    {

        public virtual string AssemblyQualifiedName { get; internal protected set; }
        public virtual CustomType BaseType { get; internal protected set; }
        public virtual string FullName { get; internal protected set; }
        public virtual string Name { get; internal protected set; }
        public virtual bool IsAbstract { get; internal protected set; }
        public virtual bool IsAnonymousType { get; internal protected set; }
        public virtual bool IsArray { get; internal protected set; }
        public virtual bool IsClass { get; internal protected set; }
        public virtual bool IsConstructed { get; internal protected set; }
        public virtual bool IsContravariant { get; internal protected set; }
        public virtual bool IsCovariant { get; internal protected set; }
        public virtual bool IsDelegate { get; internal protected set; }
        public virtual bool IsDynamic { get; internal protected set; }
        public virtual bool IsEnum { get; internal protected set; }
        public virtual bool IsInterface { get; internal protected set; }
        public virtual bool IsInternal { get; internal protected set; }
        public virtual bool IsNested { get; internal protected set; }
        public virtual bool IsPointer { get; internal protected set; }
        public virtual bool IsPredefinedType { get; internal protected set; }
        public virtual bool IsPrivate { get; internal protected set; }
        public virtual bool IsProtected { get; internal protected set; }
        public virtual bool IsProtectedOrInternal { get; internal protected set; }
        public virtual bool IsPublic { get; internal protected set; }
        public virtual bool IsReferenceType { get; internal protected set; }
        public virtual bool IsSealed { get; internal protected set; }
        public virtual bool IsStatic { get; internal protected set; }
        public virtual bool IsStruct { get; internal protected set; }
        public virtual bool IsTypeParameter { get; internal protected set; }
        public virtual bool IsUnknown { get; internal protected set; }
        public virtual bool IsValueType { get; internal protected set; }
        public virtual bool IsAnsiClass { get; internal protected set; }        
        public virtual bool IsSerializable { get; internal protected set; }
        public virtual string Namespace { get; internal protected set; }
        public virtual CustomType UnderlyingSystemType { get; internal protected set; }


        public virtual CustomConstructorInfo[] GetConstructors(BindingFlags bindingAttr)
        {
            throw new NotImplementedException();
        }

        public virtual CustomType GetElementType()
        {
            throw new NotImplementedException();
        }

        public virtual CustomEventInfo GetEvent(string name, BindingFlags bindingAttr)
        {
            throw new NotImplementedException();
        }

        public virtual CustomEventInfo[] GetEvents(BindingFlags bindingAttr)
        {
            throw new NotImplementedException();
        }

        public virtual CustomFieldInfo GetField(string name, BindingFlags bindingAttr)
        {
            throw new NotImplementedException();
        }

        public virtual CustomFieldInfo[] GetFields(BindingFlags bindingAttr)
        {
            throw new NotImplementedException();
        }



        public virtual CustomType GetInterface(string name, bool ignoreCase)
        {
            throw new NotImplementedException();
        }

        public virtual CustomType[] GetInterfaces()
        {
            throw new NotImplementedException();
        }

        public virtual CustomMemberInfo[] GetMembers(BindingFlags bindingAttr)
        {
            throw new NotImplementedException();
        }

   
        public virtual CustomMethodInfo[] GetMethods(BindingFlags bindingAttr)
        {
            throw new NotImplementedException();
        }

        public virtual CustomType GetNestedType(string name, BindingFlags bindingAttr)
        {
            throw new NotImplementedException();
        }

        public virtual CustomType[] GetNestedTypes(BindingFlags bindingAttr)
        {
            throw new NotImplementedException();
        }

        public virtual CustomPropertyInfo[] GetProperties(BindingFlags bindingAttr)
        {
            throw new NotImplementedException();
        }

  
        public virtual object InvokeMember(string name, BindingFlags invokeAttr, Binder binder, object target, object[] args, ParameterModifier[] modifiers, System.Globalization.CultureInfo culture, string[] namedParameters)
        {
            throw new NotImplementedException();
        }
       

        public virtual object[] GetCustomAttributes(Type attributeType, bool inherit)
        {
            throw new NotImplementedException();
        }

        public virtual object[] GetCustomAttributes(bool inherit)
        {
            throw new NotImplementedException();
        }

        public virtual bool IsDefined(Type attributeType, bool inherit)
        {
            throw new NotImplementedException();
        }
        

    }
}